package com.zhaoxinms.pdf;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.Certificate;

import com.itextpdf.text.pdf.PdfSignatureAppearance;
import com.itextpdf.text.pdf.security.DigestAlgorithms;

/**
 * 测试pdf中添加水印、
 */
public class Test {

	public static void main(String args[]) throws Exception {
		String inputFileName = "file1.pdf";
		String outputFileName = "file1-result.pdf";
		String outputFile2Name = "file1-result2.pdf";
		String outputFile3Name = "file1-result3.pdf";
        
        URL resourceRootUrl = Test.class.getClassLoader().getResource("");
        String basePath = "";
        if (resourceRootUrl != null) {
            try {
                // 将URL转换为URI，再转换为File对象
                File resourceRootFile = new File(resourceRootUrl.toURI());
                basePath = resourceRootFile.getAbsolutePath();
            } catch (Exception e) {
                System.out.println("Error converting URL to file path: " + e.getMessage());
                e.printStackTrace();
            }
        } else {
            System.out.println("Resource root not found!");
        }
		PdfUtil.addWaterMark(basePath + File.separator +inputFileName,basePath + File.separator + outputFileName, "山西肇新科技");
		System.out.println("添加水印后的文件地址：" + basePath + File.separator + outputFileName);
		
		SignatureInfo info = new SignatureInfo();
		// 将证书文件放入指定路径，并读取keystore ，获得私钥和证书链
        String pkPath = basePath + File.separator + "whj.p12";
        KeyStore ks = KeyStore.getInstance("PKCS12");
        ks.load(new FileInputStream(pkPath), PdfUtil.PASSWORD);
        String alias = ks.aliases().nextElement();
        PrivateKey pk = (PrivateKey) ks.getKey(alias, PdfUtil.PASSWORD);
        // 得到证书链
        Certificate[] chain = ks.getCertificateChain(alias);
        // 封装签章信息
        SignatureInfo signInfo = new SignatureInfo();
        signInfo.setReason("理由");
        signInfo.setLocation("位置");
        signInfo.setPk(pk);
        signInfo.setChain(chain);
        signInfo.setCertificationLevel(PdfSignatureAppearance.NOT_CERTIFIED);
        signInfo.setDigestAlgorithm(DigestAlgorithms.SHA1);
        signInfo.setFieldName("demo");

        // 签章图片
        signInfo.setImagePath(basePath + File.separator + "stamp.png");
        signInfo.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC);
        //// 值越大，代表向x轴坐标平移 缩小 （反之，值越小，印章会放大）
        signInfo.setRectllx(100);
        //// 值越大，代表向y轴坐标向上平移（大小不变）
        signInfo.setRectlly(200);
        // 值越大   代表向x轴坐标向右平移  （大小不变）
        signInfo.setRecturx(150);
        // 值越大，代表向y轴坐标向上平移（大小不变）
        signInfo.setRectury(150);

        //签章后的pdf路径
        PdfUtil.sign(basePath + File.separator +inputFileName,basePath + File.separator + outputFile2Name, signInfo);
        System.out.println("合成签章后的文件地址：" + basePath + File.separator + outputFile2Name);
        
        //二维码合成
        BufferedImage qrCodeImage = PdfQrCodeGenerator.generateQrCode("https://zhaoxinms.com", 200, 200);
        // 合成到PDF
        PdfQrCodeGenerator.addQrCodeToPdf(
        	basePath + File.separator +inputFileName,    // 原始PDF路径
        	basePath + File.separator + outputFile3Name,   // 输出PDF路径
            qrCodeImage,    // 二维码图片
            50f,            // X坐标
            700f,           // Y坐标
            100f,           // 宽度
            100f            // 高度
        );
        System.out.println("PDF生成成功！文件地址：" + basePath + File.separator + outputFile3Name);
	}
}
